const { body,validationResult } = require('express-validator')
const { User } = require('../../database')
const validate = require('./errorBack')
// errorBack中的函数接收 数据验证中的数组作为参数
// 数据验证数组
const register_validData = [
    body('username') // 判断body中的username
        .notEmpty().withMessage('用户名不能为空').bail() // 是否为空 设置提示信息
        .isLength({min:2}).withMessage('用户名长度不能小于2').bail(),// 最小长度判断及提示信息
    body('email')
        .notEmpty().withMessage('邮箱不能为空').bail()
        .isEmail().withMessage('邮箱格式不正确').bail()
        .custom(async val => {
            const emailVaildate = await User.findOne({email:val})
            if(emailVaildate){
                return Promise.reject('邮箱已被注册')
            }
        }).bail(),
    body('phone')
        .notEmpty().withMessage('手机号不能为空').bail()
        .custom(async val => {
            const phoneValidate = await User.findOne({phone:val})
            if(phoneValidate){
                return Promise.reject('手机号已被注册')
            }
        }).bail(),
    body('password')
        .notEmpty().withMessage('密码不能为空').bail()
        .isLength({min:5}).withMessage('密码长度不能小于5').bail()
]
const login_validData = [
    body('email')
        .notEmpty().withMessage('邮箱不能为空').bail()
        .isEmail().withMessage('邮箱格式不正确').bail()
        .custom(async val => {
            const emailVaildate = await User.findOne({email:val})
            if(!emailVaildate){
                return Promise.reject('邮箱未注册')
            }
        }).bail(),
    body('password')
        .notEmpty().withMessage('请输入密码').bail()
        .isLength({min:6}).withMessage('密码长度不能小于6位').bail()
]     
const  change_validData = [
    body('email')
        // .isEmail().withMessage('邮箱格式不正确').bail()
        .custom(async val => {
            const emailVaildate = await User.findOne({email:val})
            if(emailVaildate){
                return Promise.reject('邮箱已被注册')
            }
        }).bail(),
    body('username')
        .custom(async val => {
            const usernameVaildate = await User.findOne({username:val})
            if(usernameVaildate){
                return Promise.reject('该用户已经注册')
            }
        }).bail(),
    body('phone')
    .custom(async val => {
        const phoneVaildate = await User.findOne({phone:val})
        if(phoneVaildate){
            return Promise.reject('该手机已经注册')
        }
    }).bail()
        
]
module.exports.register = validate(register_validData)
module.exports.login = validate(login_validData)
module.exports.change = validate(change_validData)